﻿/**
 * 軟電話操作(相容所有交換機)
 * @author kevin.ding
 * @date 2008-09-03
 */

/**
 * 軟電話事件
 * @param {Object} SoftPhoneEventID   事件碼
 * @param {Object} CallIVRInfo     電話資訊
 */
//保存上一次的事件
var lastEvent = '';
var zbflag = false;//默认是内线转接，true表示外线转接
//需要忽略未就绪或者就绪状态的一些状态
var releaseStatus = ['20012','20004','20009',/*'20011','20012',*/'20000','20001','20002'];
function SoftPhoneEvent(SoftPhoneEventID,CallIVRInfo){
	
	if(SoftPhoneEventID=='undefined'||SoftPhoneEventID==null){
		return;
	}
	
	SoftPhoneEventID+='';
	//过滤重复事件
	if(SoftPhoneEventID==lastEvent){
		return;
	}
	//如果上一次是保持通話，則延遲1秒
	//alert(SoftPhoneEventID);
	//kevin add解决转拨外线时不自动继续，保留界面模组
	var logger = new Logger('softPhoneforAllAction.js');
	logger.debug('log lastEvent:::'+lastEvent+',zbflag::::'+zbflag+',SoftPhoneEventID:::'+SoftPhoneEventID+',is true??:::'+(lastEvent == '30001'&&zbflag));
	if(lastEvent == '30001'&&zbflag){
		logger.debug('==========Enter=============');
		//logger.debug('into outline transfer,change 10002 to 20011:' + softPhoneEventID);
		logger.debug('==========1=============');
		zbflag = false;
		logger.debug('==========2=============');
		//logger.debug('change the flag zbflag:::::' + zbflag);
		logger.debug('==========3=============');
		if(SoftPhoneEventID=='10002'){
			logger.debug('==========4=============');
			SoftPhoneEventID = '20011';
			logger.debug('==========5=============');
		} 
		logger.debug('==========6=============');
		//logger.debug('end outline transfer,change 10002 to 20011:' + softPhoneEventID);
		logger.debug('==========7=============');
		logger.debug('==========Out=============+zbflag:::'+zbflag);
	}
	
	//同步交换机状态
	var synccicstat = '';
	
	//商周特别处理,将20004接听事件分成三个事件
	if(SoftPhoneEventID=='20004'&&lastEvent!='20005'){
		/**
		if (logger.isDebugEnabled()) {
            logger.debug('进入20004事件.....');
        }
		*/
		/**
		 * 逻辑判断，区分成三种状态
		 * 通話中-客服轉電話進線(Answer, CusTransIn)---来电号码是在一定范围内(数据字典控制)的电话
		 * 通話中-客服進線(Answer, CusIn)---来电号码不在上面所说的范围内的电话
		 * 通話中-外撥(Answer, OutBound)----拨号后的通话
		 * kevin添加20111016
		**/
		
		if(lastEvent=='20002'){
			//通話中-外撥
			synccicstat = 'Answer, OutBound';
		}else{
			/**
            if (logger.isDebugEnabled()) {
                logger.debug('CALL_IN_NUMBERS::'+CALL_IN_NUMBERS+',CALL_DATA.callerNum::::'+CALL_DATA.callerNum);
            }
            */
			//判断是否在限定的来电号码范围内
			if(CALL_IN_NUMBERS.indexOf(CALL_DATA.callerNum)==-1){
				synccicstat = 'Answer, CusIn';
			}else{
				synccicstat = 'Answer, CusTransIn';
			}
		}
        /*
        if (logger.isDebugEnabled()) {
            logger.debug('更改通话中状态为:' + synccicstat + '---------start');
			
			 logger.debug('更改通话中状态为:' + synccicstat + '---------end');
        }
		*/
		Ext.SoftPhoneAction.setAllStatus(synccicstat);
	}
	

	if(lastEvent == '20009'){
		//設置1秒延遲
		//setTimeout("Ext.SoftPhoneAction.softPhoneEvent("+SoftPhoneEventID+","+CallIVRInfo+")",1000);
		Ext.SoftPhoneAction.softPhoneEvent(SoftPhoneEventID,CallIVRInfo);
	}else{
		Ext.SoftPhoneAction.softPhoneEvent(SoftPhoneEventID,CallIVRInfo);
	}
	
	lastEvent = SoftPhoneEventID;
	
}

Ext.SoftPhoneAction = function(){
	return {
		log: new Logger('softPhoneforAllAction.js'),
		init:function(){
			alert('Ext.SoftPhoneAction');
		},
		//中英項目增加
		/**
		 * 回應電話事件
		 * @param {Object} softPhoneEventID		事件編號
		 * @param {Object} callIVRInfo			ivr信息
		 */
		softPhoneEvent:function(softPhoneEventID,callIVRInfo){
			//alert(softPhoneEventID);
			if (this.log.isDebugEnabled()) {
                this.log.debug('softPhoneEventID:' + softPhoneEventID + ",callIVRInfo:" + callIVRInfo);
            }
			//改變按鈕狀態
			var flag;
			if(softPhoneEventID=='20000'||softPhoneEventID=='20001'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入電話進線事件,事件碼:' + softPhoneEventID);
                }
				flag = 3;
                if (this.log.isDebugEnabled()) {
                    this.log.debug('進線時進入了清空錄音檔案名,事件碼:'+softPhoneEventID);
                }
                
              //表示電話進線
				INLINE_TYPE = 'inline';
				//撥號的時候清空錄音資料
				CALL_DATA.recordId = '';
				CALL_DATA.recordFileName = '';
				CALL_DATA.seqNumber = '';
                /*訂單編號，ivr帶過來的(此參數由於CCE平臺技術問題未解決，
                 無法測試)電話進線資訊：用&符合分割，第一位為訂單號,其餘預留. 例：訂單號為
                 0011，信息為：0011&AAA&BBB)
                 */
				//
				
				
				 //來電日期
                var callInTime = new Date().format('Y-m-d H:i:s');
                //進線的時候獲取一些ivr的資料
                if (AIC_SYSTEM == 'Demo') {
					
                    var ivrInfo_d = 'aaa&bbb';
                    var orderNum_d = ivrInfo_d.split('&');
                    
                    //alert('orderNum_d::'+orderNum_d[0]);
					
                    //隨機產生手機號碼
                    var baseNumber = 'C1012';
                    var radomNum = Grandsys.sys.Utils.getRandomNumber(0, 9);
                    var number = baseNumber //+ radomNum;
                    //隨機產生callid
                    var callid = Grandsys.sys.Utils.getRandomNumber(0, 99999999);
                    //alert(nowDate.toLocaleTimeString()+','+nowDate.toTimeString());
                    //alert(number+','+callid+','+callInTime);
                    //alert(new Date().format('Y-m-d H:i:s'));
					
					CALL_DATA.callerNum = number;//進線號碼
					CALL_DATA.callId = callid;
					CALL_DATA.callDirection = 'in';
					CALL_DATA.callIntime = callInTime;
					CALL_DATA.pbxCallId = callid;//振玲時獲取
                }
                else if (AIC_SYSTEM == 'Aspect') {
					//轉接帶過來的參數
					/** leo注釋
					var transferInfo = callIVRInfo.UUI;
                	var ivrInfo = callIVRInfo.IVRInfo;
                	var ivrStrs = ivrInfo.split('&');
					//ivr訂單號碼
					
					var orderNum = ivrStrs[0];
		
					if(orderNum == null || orderNum.length == 0){
						orderNum = transferInfo;
					}
					*/
					var orderNum = null;
                	
					//CALL_DATA.calledNum = callIVRInfo.CallToNumber;//被叫號碼
					CALL_DATA.calledNum = callIVRInfo.LocalIdCallNumber;//被叫號碼
					CALL_DATA.callerNum = callIVRInfo.CallFromNumber;//進線號碼
					CALL_DATA.callId = callIVRInfo.CallId;
					CALL_DATA.pbxCallId = callIVRInfo.CallId;//振玲時獲取
					CALL_DATA.callDirection = 'in';
					CALL_DATA.callIntime = callInTime;
					CALL_DATA.callType = callIVRInfo.CallCategory;
					CALL_DATA.inlineOrderId = orderNum!=null?orderNum:'';
					CALL_DATA.ringType = callIVRInfo.EventCause;//響鈴狀態
					//商周增加
					CALL_DATA.inLineType = callIVRInfo.ActType;//杂志别
					CALL_DATA.subscriberNo = callIVRInfo.CustNo;//订户编号
					CALL_DATA.inputCallNo = callIVRInfo.CustphoneNo//订户输入的电话号码
					
					//设置客户资料页签杂志别
					try {
						
						//Ext.custInfo_ws.setIbInLineType(CALL_DATA.inLineType);
						
                        var formPanel = Ext.getCmp('u_custInfo_panel');
                        if (formPanel != null) {
                            var formp = formPanel.getForm();
                            formp.setValues({
								IB_inline_type:CALL_DATA.inLineType,
								IB_inline_subscriberNo:CALL_DATA.subscriberNo,
								IB_inline_mobileNumber:CALL_DATA.inputCallNo
							});
                        }
						
					} catch (e) {
						this.log.debug('设置杂志别异常'+e.message);
					}
					
					if (this.log.isDebugEnabled()) {
	                    this.log.debug('獲取到的隨路數據是:callerNum==='+CALL_DATA.callerNum
	                    		+',callId=='+CALL_DATA.callId+',inlineOrderId=='+CALL_DATA.inlineOrderId+',ringType=='+CALL_DATA.ringType+',actType=='+CALL_DATA.inLineType
								+',subscriberNo=='+CALL_DATA.subscriberNo+',inputCallNo==='+CALL_DATA.inputCallNo);
	                }
					
					
                }
                //設置來電號碼
                this.setActInfo('Called_info', CALL_DATA.callerNum);
                //function:VIP客戶判斷邏輯 author:lili date:20090807
                /**
                try{
               		var obj=new com.grandsys.softphone.vip.AvivaVIPSoftphone()
               		obj.callingTriger(obj,CALL_DATA.callerNum);
                }catch(e){
                	Ext.Msg.alert('',e);//錯誤提示
                }
                */
			}else if(softPhoneEventID == '20002'){
                	/********測試底層寫日誌*******/
					//this.log.debug('開始測試底層寫日誌方法');
					//MyCCRecorder_AutoRecordingStateChange('RecordingState','SeqNumber','FileName','RecordingCallId','RecordingStoreId');
					//this.log.debug('結束測試底層寫日誌方法');
					/************測試結束**************/
	                if (this.log.isDebugEnabled()) {
	                    this.log.debug('進入撥號事件,事件碼:' + softPhoneEventID+',撥打的號碼:'+CALLED_NUMBER);
	                }
					flag = 6;
                    if (this.log.isDebugEnabled()) {
                        this.log.debug('撥號時進入了清空錄音檔案名,事件碼:'+softPhoneEventID);
                    }
					//撥號的時候清空錄音資料
					CALL_DATA.recordId = '';
					CALL_DATA.recordFileName = '';
					CALL_DATA.seqNumber = '';
					
					//來電日期
					var callInTime = new Date().format('Y-m-d H:i:s'); 
					//外撥的時候獲取一些ivr的資料
					if(AIC_SYSTEM == 'Demo'){
						//隨機產生callid
						var callid = Grandsys.sys.Utils.getRandomNumber(0,99999999);
						//alert(number+','+callid+','+callInTime);
						CALL_DATA.callerNum = CALLED_NUMBER;
						CALL_DATA.callId = callid;
						CALL_DATA.pbxCallId = callid;//撥號時獲取
						CALL_DATA.callDirection = 'out';
						CALL_DATA.callIntime = callInTime;
					}else if(AIC_SYSTEM == 'Aspect'){
						CALL_DATA.calledNum = callIVRInfo.CallToNumber;
						CALL_DATA.callerNum = CALLED_NUMBER;//外撥號碼
						/**
						if(!callIVRInfo.CallId){
							CALL_DATA.callId = "";
						}else{
							CALL_DATA.callId = callIVRInfo.CallId;
						}
						*/
						CALL_DATA.callId = callIVRInfo.CallId;
						CALL_DATA.pbxCallId = callIVRInfo.CallId;//撥號時獲取
						CALL_DATA.callDirection = 'out';
						CALL_DATA.callIntime = callInTime;
						CALL_DATA.callType = callIVRInfo.CallCategory;
						CALL_DATA.ringType = callIVRInfo.EventCause;//響鈴狀態
						
						if (this.log.isDebugEnabled()) {
		                    this.log.debug('外撥獲取到的隨路數據是:calledNum==='+CALL_DATA.calledNum+',callerNum==='+CALL_DATA.callerNum
		                    		+',callId=='+CALL_DATA.CallId+',inlineOrderId=='+CALL_DATA.inlineOrderId+',ringType=='+CALL_DATA.ringType);
		                }
					}
			}else if(softPhoneEventID=='20004'||softPhoneEventID=='Answer, OutBound'||softPhoneEventID=='Answer, CusTransIn'||softPhoneEventID=='Answer, CusIn'){
                if (this.log.isDebugEnabled()) {
                    this.log.debug('進入電話接通服務中事件,事件碼:' + softPhoneEventID);
					this.log.debug('Called_info:' + callIVRInfo.CallFromNumber);
                }
				flag = 4;
				//add by leo begin 獲取callid
				//CALL_DATA.pbxCallId = callIVRInfo.CallId;//撥號時獲取	

				//end
				//CALL_DATA.callerNum = callIVRInfo.CallFromNumber;//進線號碼


				//設置來電號碼
               // this.setActInfo('Called_info', CALL_DATA.callerNum);



				if(AIC_SYSTEM == 'Demo'){
					this.softPhoneEvent('20013');
				}
				//alert('執行到這裡,一定會改變按鈕狀態的');
			}else if(softPhoneEventID=='20003'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入內線電話接通事件,事件碼:' + softPhoneEventID + ',當前的邏輯callid:-' + LOGIC_CALL_ID + "-");
                }
				//add by leo begin 獲取callid
				CALL_DATA.pbxCallId = callIVRInfo.CallId;//撥號時獲取
				//end
                
                if(LOGIC_CALL_ID == null || LOGIC_CALL_ID.trim() == ""){
                	if (this.log.isDebugEnabled()) {
	                    this.log.debug('內線通話中，沒有邏輯callid，獲取隨路數據，事件碼:' + status + ',當前的邏輯callid:' + LOGIC_CALL_ID);
	                }
	                
                	//CALL_DATA.calledNum = callIVRInfo.CallToNumber;//被叫號碼
					CALL_DATA.calledNum = callIVRInfo.LocalIdCallNumber;//被叫號碼
					CALL_DATA.callerNum = callIVRInfo.CallFromNumber;//進線號碼
					CALL_DATA.callId = callIVRInfo.CallId;
					CALL_DATA.pbxCallId = callIVRInfo.CallId;//振玲時獲取
					CALL_DATA.callDirection = 'in';
					CALL_DATA.callIntime = callInTime;
					CALL_DATA.callType = callIVRInfo.CallCategory;
					CALL_DATA.inlineOrderId = orderNum!=null?orderNum:'';
					CALL_DATA.ringType = callIVRInfo.EventCause;//響鈴狀態
					
					
					if (this.log.isDebugEnabled()) {
	                    this.log.debug('內線通話中，沒有邏輯callid，獲取到的隨路數據是:calledNum==='+CALL_DATA.calledNum+',callerNum==='+CALL_DATA.callerNum
	                    		+',callId=='+CALL_DATA.callId+',inlineOrderId=='+CALL_DATA.inlineOrderId+',ringType=='+CALL_DATA.ringType);
	                }
	                //設置來電號碼
	                this.setActInfo('Called_info', CALL_DATA.callerNum);
                
                }

					
				//表示內線通話中
				//alert(CALL_DATA.callType);
				//if(CALL_DATA.callType == 3){
					flag = 9;
				//}
			}else if(softPhoneEventID=='20007'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入會議中事件,事件碼:' + softPhoneEventID);
                }
                //add by leo begin 獲取callid
				CALL_DATA.pbxCallId = callIVRInfo.CallId;//撥號時獲取
				//end
				flag = 10;
			}else if(softPhoneEventID=='20008'||softPhoneEventID=='20009'||softPhoneEventID=='20010'||softPhoneEventID=='20011'||softPhoneEventID=='20012'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入電話掛斷事件,事件碼:' + softPhoneEventID);
                }
				flag = 5;
			}else if(softPhoneEventID=='20005'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入保留事件,事件碼:' + softPhoneEventID);
                }
				//Ext.SoftPhoneAll.optBtn(2);
				flag = 8;
			}else if(softPhoneEventID=='10002'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入就緒事件,事件碼:' + softPhoneEventID);
					onAvaiable();
                }
				flag = 11;
			}else if(softPhoneEventID=='10001'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入未就緒事件,事件碼:' + softPhoneEventID);
                }
				flag = 12;
			}else if(softPhoneEventID=='21007'){//協力廠商掛斷
				flag = 13;
			}else if(softPhoneEventID=='20006'|| softPhoneEventID == '20019'){
				if (this.log.isDebugEnabled()) {
                    this.log.debug('二步 轉接、會議:接通:' + softPhoneEventID);
                }
				//区分内线和外线转接
				if(softPhoneEventID=='20006'){
					zbflag = false;
				}else if(softPhoneEventID == '20019'){
					zbflag = true;
					if (this.log.isDebugEnabled()) {
                    this.log.debug('change the flag zbflag:::::' + zbflag);
					}
				}
				flag = 14;
				CALL_DATA.pbxCallId = callIVRInfo.CallId;//二步 轉接、會議:接通時獲取
			}
			
			//alert(flag);
			this.setButton(flag);
            /**
				内线(外呼)
				20002--20003--20008
				外线(外呼)
				20002--20004--20012
				内线（进线）
				20000--20003--20008
				外线(进线)
				20001--20004--20011
            */
			
			//不同狀態的操作
			switch(softPhoneEventID) {
				//外線振鈴
				case '20001':
					//表示電話進行中,不能關閉電話作業
					//IS_CALLING = true;
					
	                //振鈴時產生新caseid,先判斷上一個是否可以結束
	                Ext.CaseManage.stopCase('inLine');
	                //鎖定當前case
	                Ext.CaseManage.lockCase(SYSTEM_CASE_ID);
					
					break;
				//內線振鈴
				case '20000':
					//設置來電號碼
					this.setActInfo('Called_info', CALL_DATA.callerNum);
	                //振鈴時產生新caseid,先判斷上一個是否可以結束
	                Ext.CaseManage.stopCase('inLine');
	                //鎖定當前case
	                Ext.CaseManage.lockCase(SYSTEM_CASE_ID);
					break;
				//撥號中
				case '20002':
					//alert('dail');
					//表示電話進行中,不能關閉電話作業
					//IS_CALLING = true;
					
                    if (AIC_SYSTEM == 'Demo') {
                        this.softPhoneEvent('20013');
                    }
					break;
				//通話中
				case '20003':
//					if(flag_get_call){
//						//需要保存话务小結inbound
//						//flag_save_workorderrecord = false;
//						//接聽後初使變量
//                   		flag_get_call = false;
//					}
					//表示電話進線
					//INLINE_TYPE = 'inline';
					break;
				//服務中
				case '20004':
					//表示電話接通,不能關閉電話作業
					IS_CALLING = true;
					//接聽時設置變量
//					if(flag_get_call){
//						//需要保存话务小結inbound
//						//flag_save_workorderrecord = false;
//						//接聽後初使變量
//                   		flag_get_call = false;
//					}
					//表示電話進線
					//INLINE_TYPE = 'inline';
					//ACW_ENDABLE = false;
					//this.callComing();
					break;
				case '20009':
					//表示電話接通,不能關閉電話作業
					IS_CALLING = true;
					break;
				//inbound話後處理
				case '20011':
					//表示電話接通,不能關閉電話作業
					IS_CALLING = true;
					break;
				//outbound話後處理
				case '20012':
					/**
					var dailAct = Ext.getCmp('actAvaliable');
                    if (dailAct) {
                        dailAct.handler();
                    }
                    */
                    //表示電話接通,不能關閉電話作業
					IS_CALLING = true;
					Ext.SoftPhoneAction.setAllStatus('FollowUp, OutBound');
					break;
				//電話掛斷
				case '20008':
					//設置來電號碼
					//alert()
					this.setActInfo('Called_info', '');

					/*					
					var RetVal;
					var CallParameters = new Object();
					CallParameters["PhoneNumber"] = "1000";
					CallParameters["CallDialType"] = "2"; //表示(暫時定義)  0:<默認> 內線   1:AOD_1 外線  2:ACD_1 回訪
					CallParameters["ServiceId"] = "15";
					RetVal = window.frames['SoftPhoneOCXID'].SoftPhoneFunction("2001", CallParameters);
					*/

					break;
				//转接外线	
				case '20006':
					//转接外线,不用保存话务小结，看做没打电话
					IS_CALLING = false;
					break;
				//转接内线	
				case '20019':
					//转接,不用保存话务小结，看做没打电话
					IS_CALLING = false;
					break;
				//錄音獲取
				case '21002':
					
                	if (this.log.isDebugEnabled()) {
	                    this.log.debug('進入錄音獲取事件,事件碼:'+softPhoneEventID);
	                }
					if(AIC_SYSTEM == 'Demo'){
						if (CALL_DATA.recordFileName.length == 0) {
							//隨機產生callid
							var fileName = Grandsys.sys.Utils.getRandomNumber(0, 99999);
							CALL_DATA.recordId = fileName;
							CALL_DATA.recordFileName = fileName + '.vox';
							CALL_DATA.seqNumber = fileName;
						}
					}else if(AIC_SYSTEM == 'Aspect'){
						//alert("PID-----" + callIVRInfo.PID);
						/***/
						//this.log.debug('事件碼:'+softPhoneEventID+',recordId:'+callIVRInfo.RecordingCallId+',recordFileName:'+callIVRInfo.RecordFileName+',seqNumber:'+callIVRInfo.SeqNumber);
                        //leo modify 2010-03-29
                        this.log.debug('事件碼:'+softPhoneEventID+',recordId & pid :'+callIVRInfo.PID+',recordFileName:'+callIVRInfo.RecordFileName+',seqNumber:'+callIVRInfo.SeqNumber);
                        
                        try {
                            if (CALL_DATA.recordFileName.length == 0) {
                                CALL_DATA.recordId = callIVRInfo.PID;
                                CALL_DATA.recordFileName = '';
                                CALL_DATA.seqNumber = callIVRInfo.SeqNumber;
                            }
                        } 
                        catch (e) {
                        	this.log.error('獲取錄音文件出錯:'+e.message);
                        }
                        
					}
					if (this.log.isDebugEnabled()) {
						this.log.debug('事件碼:'+softPhoneEventID+',recordId:'+CALL_DATA.recordId+',recordFileName:'+CALL_DATA.recordFileName+',seqNumber:'+CALL_DATA.seqNumber);
						this.log.debug('離開錄音獲取事件,事件碼:'+softPhoneEventID);
	                }
					break;
				case '21007':
					//協力廠商掛斷
					//alert("21007---協力廠商掛斷");
					//如果當前協力廠商掛斷是IVR掛斷，則執行IVR卡單查詢
					if("Y" == CALL_DATA.isTurnIVR){
						Ext.ivrKdActivation.findCardInfo();
						CALL_DATA.isTurnIVR = "N";
					}
					
					break;
				default :
					break;
			}
			
			//記錄電話歷史
			var param = {
                lcallId: LOGIC_CALL_ID,
                custNumber: CALL_DATA.callerNum,//callIVRInfo==null?'':callIVRInfo.CallFromNumber,
                custId: '',
                pbxCallId: CALL_DATA.callId,
				callDirection:CALL_DATA.callDirection
            }
            this.updateCallHistory(softPhoneEventID, param);

			//this.log.debug('softPhoneEventID:' + softPhoneEventID);
			//this.log.debug('softPhoneEventID:' + callIVRInfo.UserStatus);
			//this.log.debug(softPhoneEventID=='10001');

			if(softPhoneEventID=='10001')
			{
				this.log.debug('softPhoneEventID:' + callIVRInfo.UserStatus);
				Ext.SoftPhoneAction.changeStatus(callIVRInfo.UserStatus);
			}
			else
			{
				Ext.SoftPhoneAction.changeStatus(softPhoneEventID);
			}
			//this.log.debug("end");

		},
		//改變狀態
		changeStatus:function(softPhoneEventID){
            //根據狀態碼改變系統狀態
            //獲取匹配交換機狀態的url
			//alert("changeStatus:function "+softPhoneEventID);
            var getStatusUrl = 'statusManager/statusMgr!findStatusByCallState.action';
            var statusHtmlEl = document.getElementById('shortcut_agentStatus');
            var statusel = Ext.get(statusHtmlEl);
            //alert(softPhoneEventID);
			//this.log.debug('changeStatus:' + softPhoneEventID);
            if (statusel != null) {
                //獲取當前交換機狀態對應的系統狀態(同步獲取)
				//this.log.debug('getting code');
                var conn = Ext.lib.Ajax.getConnectionObject().conn;
                
                var url = getStatusUrl + '?callState=' + softPhoneEventID;//
                conn.open("GET", url, false);//false表示同步調用
                conn.send(null);
                var data = Ext.util.JSON.decode(conn.responseText);
                
                var vstatus = data.status;
                //alert(vstatus.statusName);//add by lili soft

				//this.log.debug('change:' + vstatus.statusName);
                //this.log.debug('change:' + vstatus.exchangeStatusName);
                if (vstatus != null) {
                    var lastStatus = {
                        url: vstatus.statusImage,
                        name: vstatus.statusName,
                        sid: vstatus.statusId,
                        callStatus: vstatus.exchangeStatusName,
						newAlertTime:vstatus.alertTime
                    }
                    Ext.statusChange.change(lastStatus);
                }
            }
		},
		// 記錄電話歷史記錄
		updateCallHistory : function(status, param) {
			/*
	            if (this.log.isDebugEnabled()) {
	                this.log.debug('進入電話記錄更新,事件碼:' + status);
	            }
			*/
			
			var url;
			var params;
			if (status == '20002' || status == '20000' || status == '20001') {
				if (this.log.isDebugEnabled()) {
                    this.log.debug('進入電話開始新增來電記錄,事件碼:' + status);
                }
				
				url = 'busSoftPhone/spOpt!startLCallId.action';
				var conn = Ext.lib.Ajax.getConnectionObject().conn;

				conn.open("GET", url + '?callDirection=' + param.callDirection
						+ '&pbxCallId=' + param.pbxCallId + '&custNumber='
						+ param.custNumber + '&custId=' + param.custId, false);// false表示同步調用
				conn.send(null);
				var data = Ext.util.JSON.decode(conn.responseText);
				// 產生邏輯callid
				// alert(LOGIC_CALL_ID);
				LOGIC_CALL_ID = data.LcallId;
				// alert(LOGIC_CALL_ID);
				
				//外撥時新增一條空的通話結果
				if(status == '20002'){
					Ext.custInfo.saveHistoryResultBySoftPhone(LOGIC_CALL_ID, CALLED_NUMBER);
				}
				if (this.log.isDebugEnabled()) {
                    this.log.debug('離開電話開始新增來電記錄,事件碼:'+ status+',產生的邏輯callid:'+data.LcallId+',CALLED_NUMBER:'+CALLED_NUMBER);
                }
                
                //只有在內外線振玲，撥號                
				param.lcallId = LOGIC_CALL_ID;
				/**
                if( status == '20000' || status == '20001' || status == '20002' ){                
	                //保存關聯callid，主要是在轉接會議
	                Ext.Ajax.request({
						url : 'busSoftPhone/spOpt!savePbxCallId.action',
						success : function(result, obj) {
							var jsonFromServer = Ext.util.JSON.decode(result.responseText);
							if (jsonFromServer.success) {
							} else {
								// alert('failure');
							}
						},
						failure : function() {
							//alert('failure');
						},
						headers : {
							'my-header' : 'foo'
						},
						params : {
							logicCallId : param.lcallId,
							pbxCallId : CALL_DATA.pbxCallId //交換機CallID
						}
					});
				}
				*/
				return;
				// params = {};
			} else if (status == '20003'||status == '20004') {				
                if (this.log.isDebugEnabled()) {
                    this.log.debug('開始更新電話來電記錄,事件碼:' + status + ',當前的邏輯callid:' + LOGIC_CALL_ID);
                }
                //leo modify begin 因為grandstream話機在內線進線時沒有振玲事件，所以在內線通話中時保存電話歷史
				if(status == '20003' && (LOGIC_CALL_ID == null || LOGIC_CALL_ID.trim() == "")){
					if (this.log.isDebugEnabled()) {
	                    this.log.debug('內線通話中，沒有邏輯callid，產生一個新的，事件碼:' + status + ',當前的邏輯callid:' + LOGIC_CALL_ID);
	                }
					url = 'busSoftPhone/spOpt!startLCallId.action';
					var conn = Ext.lib.Ajax.getConnectionObject().conn;
	
					conn.open("GET", url + '?callDirection=' + param.callDirection
							+ '&pbxCallId=' + param.pbxCallId + '&custNumber='
							+ param.custNumber + '&custId=' + param.custId, false);// false表示同步調用
					conn.send(null);
					var data = Ext.util.JSON.decode(conn.responseText);
					// 產生邏輯callid
					// alert(LOGIC_CALL_ID);
					LOGIC_CALL_ID = data.LcallId;
					
					if (this.log.isDebugEnabled()) {
	                    this.log.debug('開始更新電話來電記錄,事件碼:' + status + ',新產生的當前的邏輯callid:' + LOGIC_CALL_ID);
	                }
	                param.lcallId = LOGIC_CALL_ID;
	                /**
	                //保存關聯callid
	                Ext.Ajax.request({
						url : 'busSoftPhone/spOpt!savePbxCallId.action',
						success : function(result, obj) {
							var jsonFromServer = Ext.util.JSON.decode(result.responseText);
							if (jsonFromServer.success) {
								
							} else {
								if (this.log.isDebugEnabled()) {
				                    this.log.debug('保存關聯callid不成功,沒有振玲事件,事件碼:' + status + ',新產生的當前的邏輯callid:' + LOGIC_CALL_ID);
				                }
							}
						},
						failure : function() {
							//alert('failure');
							if (this.log.isDebugEnabled()) {
			                    this.log.debug('保存關聯callid失敗,沒有振玲事件,事件碼:' + status + ',新產生的當前的邏輯callid:' + LOGIC_CALL_ID);
			                }
						},
						headers : {
							'my-header' : 'foo'
						},
						params : {
							logicCallId : LOGIC_CALL_ID,
							pbxCallId : CALL_DATA.pbxCallId //交換機CallID
						}
					});
					*/
				}
				
				
				//leo modify end 因為grandstream話機在內線進線時沒有振玲事件，所以在內線通話中時保存電話歷史
				
                
				url = 'busSoftPhone/spOpt!updateCallId.action';
				params = {
					pbxCallId : param.pbxCallId
				};
				if (this.log.isDebugEnabled()) {
                    this.log.debug('結束更新電話來電記錄,事件碼:' + status + ',當前的邏輯callid:' + LOGIC_CALL_ID);
                }
			} else if (status == '20008' || status == '20009' || status == '20010' || status == '20011'|| status == '20012') {
                if (this.log.isDebugEnabled()) {
                    this.log.debug('電話掛斷更新來電記錄,事件碼:' + status+',邏輯callid:'+param.lcallId);
                    this.log.debug('事件碼:' + status + ',recordId:' + CALL_DATA.recordId + ',recordFileName:' + CALL_DATA.recordFileName + ',seqNumber:' + CALL_DATA.seqNumber);
                }
				url = 'busSoftPhone/spOpt!stopCallId.action';
				params = {
					logicCallId : param.lcallId,
					recordFielName:CALL_DATA.recordFileName,  //錄音檔案名
					recordId:CALL_DATA.recordId  //錄音ID
				};
			} else if(status == '21002'){
				url = 'busSoftPhone/spOpt!saveRecordId.action';
				params = {
					logicCallId : param.lcallId,
					recordId:CALL_DATA.recordId  //錄音ID
				};
			} else if(status == '20006' || status == '20007'){
				/**
				url = 'busSoftPhone/spOpt!savePbxCallId.action';
				params = {
					logicCallId : param.lcallId,
					pbxCallId : CALL_DATA.pbxCallId //交換機CallID
				};
				*/
			}
			/*
			if(status == '20000' || status == '20001' || status == '20002' ||  status == '20003'||status == '20004' || status == '20006' || status == '20007' ){
				//保存關聯callid
				if (this.log.isDebugEnabled()) {
                    this.log.debug('保存關聯callid,事件碼:' + status + ',當前的邏輯callid:' + LOGIC_CALL_ID);
                }
                Ext.Ajax.request({
					url : 'busSoftPhone/spOpt!savePbxCallId.action',
					success : function(result, obj) {
						var jsonFromServer = Ext.util.JSON.decode(result.responseText);
						if (jsonFromServer.success) {
							
						} else {
							if (this.log.isDebugEnabled()) {
			                    this.log.debug('保存關聯callid不成功,沒有振玲事件,事件碼:' + status + ',當前的邏輯callid:' + LOGIC_CALL_ID);
			                }
						}
					},
					failure : function() {
						//alert('failure');
						if (this.log.isDebugEnabled()) {
		                    this.log.debug('保存關聯callid失敗,沒有振玲事件,事件碼:' + status + '當前的邏輯callid:' + LOGIC_CALL_ID);
		                }
					},
					headers : {
						'my-header' : 'foo'
					},
					params : {
						//logicCallId : param.lcallId,
						logicCallId : LOGIC_CALL_ID,
						pbxCallId : CALL_DATA.pbxCallId //交換機CallID
					}
				});
			}
			*/
			if (status == '20003' || status == '20004' || status == '20008' || status == '20009' || status == '20010'|| status == '20011'|| status == '20012' || status == '21002') {
				Ext.Ajax.request({
					url : url,
					success : function(result, obj) {
						var jsonFromServer = Ext.util.JSON
								.decode(result.responseText);
						if (jsonFromServer.success) {
							/*
							 * if(url=='busSoftPhone/spOpt!startLCallId.action'){
							 * //開始一個新的電話歷史的時候記錄到全域變數裡 LOGIC_CALL_ID =
							 * jsonFromServer.LcallId; //alert(LOGIC_CALL_ID); }
							 */
						} else {
							// alert('failure');
						}
					},
					failure : function() {
						alert('failure');
					},
					headers : {
						'my-header' : 'foo'
					},
					params : params
				});
			}
/*
            if (this.log.isDebugEnabled()) {
                this.log.debug('離開電話記錄更新,事件碼:' + status);
            }
*/
		},
		callComing : function() {
			// 得到交換機傳來的電話資訊,然後彈開進線標識
			if (AIC_SYSTEM == 'Demo') {
				//this.popwindow();
			}
			// 介面來電號碼顯示
			this.setActInfo('Called_info', CALL_DATA.callerNum);

			// 振鈴時產生新caseid,先判斷上一個是否可以結束
			Ext.CaseManage.stopCase('inLine');
			// 鎖定當前case
			Ext.CaseManage.lockCase(SYSTEM_CASE_ID);
		},
		// 來電時電話接通，彈出pop
		popwindow : function() {
			// alert('vipType::::::'+vipType);
			// 然後彈出進線客戶資料介面
			// 搜索條件(進線的時候條件只有電話號碼)
			var conditions = {
		         callNumber: CALL_DATA.callerNum
		    }
			var c=new Date();
			var q=c.getMilliseconds();
			CALL_DATA.callId = q*1000;
			this.addCenterPage(conditions, CALL_DATA.inlineFlag);
		},
		/**
		 * 使用者登錄時更新顯示資訊
		 * 
		 * @param {Object}
		 *            btnId 顯示按鈕的ID
		 * @param {Object}
		 *            info 更新的資訊
		 */
		setActInfo : function(btnId, info) {
			// alert('設置了來電號碼：'+info);
			try {
				var act = Ext.getCmp(btnId);
				var value = act.text;
				var newstr = value.substr(0, value.indexOf(":") + 1);
				act.setText(newstr + info);
			} catch (e) {

			}
		},
		/**
		 * 設置交換機狀態
		 * @param {Object} callStatus	交換機狀態
		 */
		setStatus:function(callStatus){
			
		},
		/**
		 * 設置交換機狀態(只處理了就緒/未就緒)
		 * @param {Object} callStatus
		 */
		setAllStatus:function(statusCode){
            
            //var statusCode = status.
            
            if (AIC_SYSTEM == 'Demo') {
            	//alert('statusCode is '+statusCode+'line 395');
            }
            else if (AIC_SYSTEM == 'Aspect') {
            	
            	var RetVal;
                var CallParameters = new Object();
				CallParameters["StatusReason"] =  statusCode;
            	RetVal = window.frames['SoftPhoneOCXID'].SoftPhoneFunction("10001", CallParameters);
                if (RetVal == 0) {
                	if (this.log.isDebugEnabled()) {
                        this.log.debug('設置狀態  '+statusCode+'  成功-------------ok');
                    }
                }
                else {
                    Grandsys.sys.Utils.alertError("未就緒失敗:" + RetVal);
                }
            	
 
            }
			
		},
		/**
		 * 控制按鈕顯示
		 * leo modify 20100505 for nissay
		 * @param {Object}
		 *            flag
		 */
		setButton : function(flag) {

			this.log.debug('setButton'+ flag );

			var btnLogin = Ext.getCmp('actLogin');//簽入
			//var btnLogout = Ext.getCmp('actLogout');//簽出
			
			var avaliableBtn = Ext.getCmp('actAvaliable');//就緒
			var notAvaliableBtn = Ext.getCmp('Auxmu');//未就緒
						
			//var btnPausemu = Ext.getCmp('Pausemu');//暫放			
			var btnAccept = Ext.getCmp('actAccept');//接聽
			var btnRealse = Ext.getCmp('actRealse');//掛斷
			var btnholdStart = Ext.getCmp('actHoldStart');//保持
			var btnholdend = Ext.getCmp('actHoldEnd');//恢復				
			var btnDail = Ext.getCmp('actDail');//撥號
			
			var btnTransfer = Ext.getCmp('actTransfer');//轉接
			var btnConference = Ext.getCmp('actConference');//會議			
			
			//alert('flag:::'+flag);
			switch (flag) {
			
				default :
					break;
				case 1 : // 簽入
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(false);//簽出
					
					avaliableBtn.setDisabled(false);//就緒
					notAvaliableBtn.setDisabled(false);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(true);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(false);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				case 2 : // 簽出
					btnLogin.setDisabled(false);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(true);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議
					break;
				case 3 : // 振鈴
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(false);//接聽
					btnRealse.setDisabled(true);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				case 4 : // 接聽(服務中)
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(false);//掛斷
					btnholdStart.setDisabled(false);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(false);//轉接
					btnConference.setDisabled(false);//會議	
					break;
				case 5 : // 掛斷
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(false);//簽出

					avaliableBtn.setDisabled(false);//就緒
					//notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(true);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(false);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					Ext.SoftPhoneAll.optBtn(5);
					break;
				case 6 : // 撥號
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(false);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(false);//轉接
					btnConference.setDisabled(false);//會議			
					
					break;
				case 7 : // 全部禁用
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(true);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				case 8 : // 保留
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(false);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(false);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				case 9 : // 接聽(通話中/內線)
				
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(false);//掛斷
					btnholdStart.setDisabled(false);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(false);//轉接
					btnConference.setDisabled(false);//會議			
					
					break;
				case 10 : // 會議中
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(false);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				case 11://就緒狀態
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(false);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(false);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(true);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(false);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				case 12://未就緒狀態
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(false);//簽出
					
					avaliableBtn.setDisabled(false);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(true);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(false);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				
				case 13://二步 轉接:取消，二步 會議:取消
				
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(false);//掛斷
					btnholdStart.setDisabled(false);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(false);//轉接
					btnConference.setDisabled(false);//會議	
					
					Ext.SoftPhoneAll.optBtn(13);		
					
					break;
				
				case 14://二步 轉接、會議:接通
				
					btnLogin.setDisabled(true);//簽入
					//btnLogout.setDisabled(true);//簽出
					
					avaliableBtn.setDisabled(true);//就緒
					notAvaliableBtn.setDisabled(true);//未就緒
								
					//btnPausemu.setDisabled(true);//暫放			
					btnAccept.setDisabled(true);//接聽
					btnRealse.setDisabled(false);//掛斷
					btnholdStart.setDisabled(true);//保持
					btnholdend.setDisabled(true);//恢復				
					btnDail.setDisabled(true);//撥號
					
					btnTransfer.setDisabled(true);//轉接
					btnConference.setDisabled(true);//會議			
					
					break;
				
			}
			
		},
		// 打開中間區域頁面
		addCenterPage : function(conditions, inlineFlag) {

			/*
			 * if (callNumber == null) { callNumber = '123456'; }
			 */
			// 測試資料,實際使用時刪除之
			// var inlineFlag = 'hc1=111,hc2=333,hc3=444';

			var obj = {
				id : 'eecdebc6-544a-4a6d-a7be-c25fa6a2df82',
				title : i18n.ShortcutSet.VAR_SOFTPH_INLINE_NEWS,
				iconCls : 'user',
				closable : true,
				autoScroll : true,
				layout : 'fit'
			};

			var tabitem = tabs
					.getItem('eecdebc6-544a-4a6d-a7be-c25fa6a2df82');

			// var grid = Ext.InlineList.buildPage(callNumber, inlineFlag);

			var grid = Ext.IbInlineList.buildPage(conditions,
					inlineFlag);

			// alert(conditions.callNumber);

			if (tabitem == null) {
				// ApPlatform.autoOpenDisplay(obj);
				var item = tabs.add(obj);
				item.show();
				item.add(grid);
				item.doLayout();
			} else {
				// Kevin080910
				tabitem.show();
				tabs.unhideTabStripItem(tabitem);
			}

		}
	}
}();

